package com.xique.door.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xique.door.bean.dao.AgeStatisticDAO;
import com.xique.door.bean.dao.DomicileStatisticDAO;
import com.xique.door.bean.domain.ParkInfo;
import com.xique.door.bean.domain.User;
import com.xique.door.bean.domain.UserV1;
import com.xique.door.bean.domain.Visitor;
import com.xique.door.bean.dto.UserBuildingInfoDTO;
import com.xique.door.bean.request.HouseSelectUserRequest;
import com.xique.door.bean.request.deviceUser.DeviceUserSelectListRequest;
import com.xique.door.bean.request.user.UserSelectRequest;
import com.xique.door.bean.search.user.UserListSearch;
import com.xique.door.bean.vo.user.UserListVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 门禁用户信息Mapper接口
 *
 * @author caogq
 * @date 2021-06-10
 */
@Repository
public interface UserMapper extends BaseMapper<User> {
    /**
     * 查询门禁用户信息
     *
     * @param id 门禁用户信息ID
     * @return 门禁用户信息
     */
    public User selectUserById(Long id);

    /**
     * 查询门禁用户信息
     *
     * @param userIds 门禁用户信息ID
     * @return 门禁用户信息
     */
//    public List<User> selectUserByIds(@Param("userIds") List<Long> userIds);

    /**
     * 查询门禁用户信息
     *
     * @param userIds 门禁用户信息ID
     * @return 门禁用户信息
     */
    public List<User> selectUserByIds(@Param("userIds") List<Long> userIds, @Param("status") Integer status);

    /**
     * 查询门禁用户信息列表
     *
     * @param user 门禁用户信息
     * @return 门禁用户信息集合
     */
    public List<User> selectUserList(User user);

    /**
     * 查询门禁用户根据项目过滤
     *
     * @param user 门禁用户信息
     * @return 门禁用户信息集合
     */
    public List<User> selectUsers(User user);


    /**
     * 新增门禁用户信息
     *
     * @param user 门禁用户信息
     * @return 结果
     */
    public int insertUser(User user);

    /**
     * 修改门禁用户信息
     *
     * @param user 门禁用户信息
     * @return 结果
     */
    public int updateUser(User user);

    /**
     * 删除门禁用户信息
     *
     * @param id 门禁用户信息ID
     * @return 结果
     */
    public int deleteUserById(Long id);

    /**
     * 批量删除门禁用户信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteUserByIds(String[] ids);

    public int clearUserUrl(String id);

    int batchInsetUser(List<User> newUserList);

    /**
     * @description: 通过用户手机号查询小区列表
     * @author caogq
     * @date: 2021/11/24 15:02
     * @Param
     */

    List<ParkInfo> selectParkInfoByUserPhone(String phone);

    List<User> selectAllocatedHouseUser(User user);

    List<User> selectUnAllocatedList(User user);

    /**
     * 单个项目人员户籍统计
     *
     * @param parkId
     * @return java.util.List<com.xique.door.bean.dao.DomicileStatisticDAO>
     * @author shd
     * @date 2021/12/22 14:04
     */
    List<DomicileStatisticDAO> selectUserDomicileStatisticByProvince(@Param("parkId") Long parkId);

    /**
     * 人员年龄统计
     *
     * @param parkId
     * @return java.util.List<com.xique.door.bean.dao.AgeStatisticDAO>
     * @author shd
     * @date 2021/12/22 15:15
     */
    List<AgeStatisticDAO> selectUserAgeStatistic(@Param("parkId") Long parkId);

    /**
     * 根据用户id获取对应项目的用户信息
     *
     * @param id
     * @return java.util.List<com.xique.door.bean.domain.User>
     * @author shd
     * @date 2022/1/5 11:38
     */
    List<User> selectUserByBaseUserId(Long id);

    /**
     * @description: 房屋绑定业主的下拉框搜索
     * @author caogq
     * @date: 2022/1/19 9:02
     * @Param
     */
    List<User> houseSelectUsers(HouseSelectUserRequest request);

    /**
     * @description: 用户列表查询
     * @author caogq
     * @date: 2022/1/25 17:15
     */
    List<UserListVo> selectConditionUserList(UserSelectRequest request);

    /**
     * 设备未授权用户查询
     *
     * @param request
     * @return java.util.List<com.xique.door.bean.domain.User>
     * @author shd
     * @date 2022/2/9 16:33
     */
    List<UserListVo> selectUnAssignedDeviceUserList(DeviceUserSelectListRequest request);

    List<UserListVo> selectAssignedDeviceUserList(DeviceUserSelectListRequest request);

    List<User> selectUserByCustomIds(@Param("customIds") List<String> customIds);

    /**
     * 根据用户id获取房屋信息
     *
     * @param userId
     * @param houseId
     * @param buildingId
     * @param areaId
     * @return com.xique.door.bean.dto.UserBuildingInfoDTO
     * @author shd
     * @date 2022/3/8 16:16
     */
    UserBuildingInfoDTO selectUserBuildInfo(@Param("userId") Long userId,
                                            @Param("houseId") Long houseId,
                                            @Param("buildingId") Long buildingId,
                                            @Param("areaId") Long areaId);


    /**
     * 获取用户列表信息
     *
     * @param search
     * @return java.util.List<com.xique.door.bean.domain.UserV1>
     * @author shd
     * @date 2022/4/19 19:37
     */
    List<UserV1> selectUserListWithBaseInfo(UserListSearch search);


    /**
     * 验证邀请码是否重复
     *
     * @param parkId
     * @param code
     * @return java.lang.Boolean
     * @author shd
     * @date 2022/2/10 14:39
     */
    int checkInvitationCode(@Param("parkId") Long parkId, @Param("code") String code);

    /**
     * 根据houseId和baseUserId查找user
     * @param baseUserId
     * @param parkId
     * @param houseId
     */
    UserV1 seleceteUserV(@Param("baseUserId") Long baseUserId, @Param("parkId") Long parkId, @Param("houseId") Long houseId);

    List<User> selectUserListWithoutBaseUser();
}
